<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>SyntaxHighlighter Highlight Tests</title>

    <!-- jQuery & QUnit -->
    <script type="text/javascript" src="js/jquery-1.4.2.js"></script>
    <script type="text/javascript" src="js/qunit.js"></script>
    <link type="text/css" rel="stylesheet" href="js/qunit.css"/>

    <!-- SyntaxHighlighter -->
    <script type="text/javascript" src="/sh/scripts/XRegExp.js"></script> <!-- XRegExp is bundled with the final shCore.js during build -->
    <script type="text/javascript" src="/sh/scripts/shCore.js"></script>
    <script type="text/javascript" src="/sh/scripts/shLegacy.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushAppleScript.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushAS3.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushBash.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushColdFusion.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushCpp.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushCSharp.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushCss.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushDelphi.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushDiff.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushErlang.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushGroovy.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushJava.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushJavaFx.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushJScript.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushPerl.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushPhp.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushPlain.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushPowerShell.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushPython.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushRuby.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushSass.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushScala.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushSql.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushVb.js"></script>
    <script type="text/javascript" src="/sh/scripts/shBrushXml.js"></script>

    <link type="text/css" rel="stylesheet" href="/sh/styles/shCoreDefault.css"/>
</head>

<body>

<h1 id="qunit-header">SyntaxHighlighter Highlight Lines Test</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>

<button id="interaction">Run interaction tests</button>

<div id="output">
</div>

<style>
body {
    background: white;
}

#interaction {
    margin-top: 1em;
    padding: 1em;
    font-size: 1.5em;
}

.test-wrap {
    width: 45%;
    height: 400px;
    overflow: auto;
    float: left;
    margin: 1em 1em 0 0;
    border: 5px solid silver;
    background: gray;
    font-family: Helvetica;
}

.test-wrap h3 {
    margin: 1em 0 0 1em;
    color: white;
    font-size: 1em;
    font-weight: normal;
}
</style>

<script type="text/javascript">
var testQueue = [],
    renderTests = [
        '001_basic',
        '002_brushes',
        '003_script_tag',
        '004_url_parsing',
        '005_no_gutter',
        '006_pad_line_numbers',
        '007_collapse',
        '008_first_line',
        '009_class_name',
        '010_highlight',
        '011_smart_tabs',
        '012_server_side',
        '013_html_script',
        '014_legacy'
    ],
    interactionTests = [
        '007_collapse_interaction'
    ]
    ;

function queue(func)
{
    testQueue.push(func);
};

function ok_sh($sh)
{
    ok($sh.length > 0, 'Element present');
    ok($sh.is('div'), 'Element is DIV');
    ok($sh.find('> div').is('.syntaxhighlighter'), 'Nested DIV is a .syntaxhighlighter');
};

function ok_toolbar($sh)
{
    var $target = $sh.find('> .syntaxhighlighter > .toolbar');
    ok($target.length > 0, 'Toolbar present');
    ok($target.is(':visible'), 'Toolbar visible');
};

function ok_caption($sh, value)
{
    var $target = $sh.find('> .syntaxhighlighter > table > caption');
    ok($target.length > 0, 'Caption present');
    ok($target.is(':visible'), 'Caption visible');

    if (value != null)
        equals($target.text(), value, 'Caption text');
};

function ok_gutter($sh)
{
    var $target = $sh.find('> .syntaxhighlighter > table > tbody > tr > .gutter');
    ok($target.length > 0, 'Gutter present');
    ok($target.is(':visible'), 'Gutter visible');
};

function ok_code($sh)
{
    var $target = $sh.find('> .syntaxhighlighter > table > tbody > tr > .code');
    ok($target.length > 0, 'Code present');
    ok($target.is(':visible'), 'Code visible');
};

function ok_collapsed($sh)
{
    ok($sh.find('> .syntaxhighlighter.collapsed').length == 1, '.collapsed present');
};

function loadTests(tests, addHtml)
{
    var html = '';

    $.each(tests, function(index)
    {
        var name = this;

        if (addHtml != false)
        {
            html += '<div class="test-wrap">\n'
            html += '<h3>' + name + '</h3>\n';
        }

        $.ajax({
            url: 'cases/' + name + '.html',
            type: 'GET',
            dataType: 'text',
            async: false,
            success: function(data)
            {
                html += data;
            },
            error: function()
            {
                html += '<p>Not found...</p>';
            }
        });

        if (addHtml != false)
        {
            html += '</div>\n';

            if (index % 2 != 0)
                html += '<div style="clear:both"></div>\n';
        }
    });

    //
    // Looks like .html() is producing different results when it comes to
    // content that has <script /> which type is NOT "text/javascript".
    // $('#output').html(html);
    //
    $('#output')[0].innerHTML += html;

    //
    // However, if HTML assigned to to .innerHTML container <script/> tags,
    // they are not executed, so we have to manually walk all of them and
    // eval() the content.
    //
    $('#output script[type="text/javascript"][class!="executed"]').each(function()
    {
        eval($(this).text() || $(this).html());
        $(this).addClass('executed')
    });
};

function runTestQueue()
{

    $.each(testQueue, function()
    {
        this.apply(null);
    });

    testQueue = [];
};

$(document).ready(function()
{
    loadTests(renderTests);
    SyntaxHighlighter.highlight();
    runTestQueue();

    $('#interaction').click(function()
    {
        loadTests(interactionTests, false /* addHtml */);
        runTestQueue();
    });
});
</script>

</body>
</html>
